package logicaPresentacion;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import logicaNegocio.Asignatura;
import logicaNegocio.Aula;
import logicaNegocio.Clase;
import logicaNegocio.GestionAdministrador;
import logicaNegocio.Grado;
import logicaNegocio.Pertenece;
import logicaNegocio.Profesor;



public class FormularioClase extends JInternalFrame implements ActionListener
{    
    /**
	 * 
	 */
	private static final long serialVersionUID = 4566498807430129781L;
	private JButton  btnCancelar,btnGuardar;
    private GestionAdministrador gAd;
	private JLabel jlbProfesor,jlbAula,jlbAsignatura;        
	private JComboBox<String>   jcbProfesor,jcbAula,jcbAsignatura;
	private Box boxVCamposVentana; 
	private JPanel panBotones;    
	private ClaseAObservar observable;
    private Clase c = null;
    
    public FormularioClase (GestionAdministrador GAd, ClaseAObservar observable)
    {
        super("Introduzca los datos de la clase");
        this.gAd = GAd;
        this.observable = observable;
        setSize(400,400);

        Box boxVContenidoVerticalVentana = Box.createVerticalBox();

        Box boxHProfesor =  Box.createHorizontalBox();
        jlbProfesor = new JLabel("Profesor ");   jcbProfesor = new JComboBox<String>();
        Iterator<Entry<String, Profesor>> it = GAd.getProfesores().entrySet().iterator();
        
		while (it.hasNext()) 
	    {
		    Entry<String, Profesor> e = it.next();
	        String Nombre = GAd.getNombreProfesor(e.getKey());
	        jcbProfesor.addItem(Nombre);
        }
		
        boxHProfesor.add(Box.createHorizontalStrut(10));
        boxHProfesor.add(jlbProfesor);
        boxHProfesor.add(Box.createHorizontalStrut(40));
        boxHProfesor.add(jcbProfesor);
        JPanel panProfesor =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panProfesor.add(boxHProfesor);

        Box boxHAula =  Box.createHorizontalBox();
        jlbAula = new JLabel("Aula ");   jcbAula = new JComboBox<String>();
        
        for(int i = 0 ; i<GAd.getAulas().size(); i++)
		{
			String Nombre = Integer.toString(GAd.getNombreAula(i));
	        jcbAula.addItem(Nombre);
        }
        
        boxHAula.add(Box.createHorizontalStrut(10));
        boxHAula.add(jlbAula);
        boxHAula.add(Box.createHorizontalStrut(40));
        boxHAula.add(jcbAula);
        JPanel panAula =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panAula.add(boxHAula);
        
        Box boxHAsignatura =  Box.createHorizontalBox();
        jlbAsignatura= new JLabel("Asignatura ");   jcbAsignatura = new JComboBox<String>();
        
        for(int i = 0 ; i<GAd.getAsignaturas().size(); i++)
		{
			String Nombre = GAd.getNombreAsignatura(i);
	        jcbAsignatura.addItem(Nombre);
        }
        
        boxHAsignatura.add(Box.createHorizontalStrut(10));
        boxHAsignatura.add(jlbAsignatura);
        boxHAsignatura.add(Box.createHorizontalStrut(40));
        boxHAsignatura.add(jcbAsignatura);
        JPanel panAsignatura =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panAsignatura.add(boxHAsignatura);
        
        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panProfesor);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panAula);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panAsignatura);
        
        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        btnGuardar.addActionListener(this);
        btnCancelar.addActionListener(this);
        
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));

        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        add(boxVContenidoVerticalVentana);
        
        setVisible(true);  
    }
    public void actionPerformed(ActionEvent e) 
	{
		if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado=(JButton)e.getSource();

			if (btnPulsado==btnGuardar) 
			{
				if(comprobarExiste() == false)
				{
		          	 gAd.anadirClase(jcbProfesor.getSelectedIndex(),jcbAula.getSelectedIndex(),jcbAsignatura.getSelectedIndex());
		          	 observable.setTabla();
		          	 dispose();
				}
				else
				{
					JOptionPane.showMessageDialog(this,"La combinacion de asignatura,profesor y aula ya existe","Error",JOptionPane.ERROR_MESSAGE);
				}
            }
			
			else if (btnPulsado==btnCancelar) 
			{
				dispose();
			}					
		}
	}
    public boolean comprobarExiste()
    {
 	   	Profesor pp = null;
     	boolean comprobacion = false;

     	ArrayList<Clase>clases = gAd.getClases();
     	Asignatura a = gAd.getAsignaturas().get(jcbAsignatura.getSelectedIndex());
     	ArrayList<Aula> aulas = gAd.getAulas();
     	Aula au = aulas.get(jcbAula.getSelectedIndex());
     	Map<String, Profesor> profesores = gAd.getProfesores();
     	
     	for (Map.Entry<String, Profesor> entry : profesores.entrySet())
 		{

     		Profesor p = profesores.get(entry.getKey());
     		if (p.getNombre().equals(jcbProfesor.getSelectedItem()))
     		{
     			pp = p;
     		}
 		}
     	
     	if(clases.size()>0)
     	{
     		for (int i=0;i<clases.size();i++)
     		{	
     			c = clases.get(i);
     			
     			if((c.getAsignatura().getID())==(a.getID()))
 				{
     				if((c.getAula().getID())==au.getID())
 					{
     					if((c.getProfesor().getDni()).equals(pp.getDni()))
     					{
     						comprobacion = true;
     					}
 					}
 				}
     		}	
     	}  	
     	return comprobacion;
     }
}